Als kleiner Service 😀 :
KREISE.DOC
=====================================
Dokumentation zu
KREISE.SRC
=====================================
Haben Sie schon versucht, Kreise in
BASIC auf den Bildschirm zu zeichen?
Wenn ja, dann wissen Sie, dass man
dabei am besten den Kaffe holt,
Zigarette besorgen geht, oder den
fehlenden Schlaf der letzten am
Computer verbrachten Nacht nachholt.
In Maschinensprache geht natuerlich
alles schneller und besser, warum
soll's mit dem Kreisemalen nicht
genauso sein?
Bevor ein Kreis am Bildschirm er-
scheinen will, muss man gewoehnlich
schon etwas an Mathematik aufbieten.
Entweder strapaziert man die Kreis-
gleichung und kommt dem Kreis mit
Wurzeln auf die Spur, oder man
macht's mit Hilfe von trigono-
metrischen Funktionen, sprich Sinus
und Kosinus.
Jedem Assemblerprogrammierer wird
inzwischen der Mut vergangen sein,
denn mit Wurzeln oder gar einem
Sinus will man sich in Assembler
wirklich nicht herumschlagen.
Schliesslich hat man auch ohne Sinus
schon genug Probleme.
Es geht auch ohne
-----------------
Eine wirklich hochinteressante
Methode zum Zeichnen von Kreisen
habe ich im BASIC XL-TOOLKIT (von
OSS) entdeckt. Damit ist es moeglich,
einen Kreis nur mit Hilfe von
Additionen und Subtraktionen zu
berechnen. Das Pogramm arbeitet mit
einer Naeherungsformel fuer einen
Achtel-Kreisbogen, der ganze Kreis
wird dann durch Spiegelung dieses
Bogens erzeugt.
Am Ende dieses Files finden Sie
das BASIC-Programm als Anhang.
Da ich vor gar nicht zurueckschrecke,
habe ich dieses Programm sogleich
in Assembler umgesetzt, und, Sie
werden es sehen, was herausgekommen
ist tatsaechlich beeindruckend.
High-Speed PLOT
===============
Wuerde man jetzt mit diesem wirklich
schnellen Kreis-Algoritmus die PLOT
Routine des Betriebssystems ver-
wenden, so hiesse das einen Porsche
mit Goggomotor zu fahren.
Nein, hier musste schon eine super-
schnelle PLOT-Routine her. Die finden
Sie in dem UP PLOT, es arbeitet mit
allen Zwei-Farb Graphikmodi (GR.4,6,
8,14) und geht, da es mit Tabellen
arbeitet, recht flott.
Die geplotteten Punkte werden Ex-
klusiv-Oder verknuepft, d.h. wenn Sie
einen Punkt auf ein bereits gesetztes
Pixel plotten, so wird dieses ge-
loescht. Auf diese Art koennen Sie
einen Kreis einfach durch nochmaliges
Zeichnen wieder vom Bildschirm ent-
fernen.
DEMO
====
Im Demo-Programm werden Ihnen die
Faehigkeiten dieser Kreis-Routine
anschaulich gezeigt: Sie koennen
einen Kreis mit dem Joystick ueber
den Bildschirm bewegen. Die Groesse
des Kreises koennen Sie mit dem
Feuerknopf veraendern.
Benutzt wird die Graphikstufe 6,
die die gleiche Aufloesung wie GR.7
besitzt, nur eben mit zwei Farben
arbeitet. Sie koennen auch mal
GR. 14 versuchen, nur bekommen Sie
dann 'Eier' statt Kreise, da die
Pixels nicht mehr quadratisch sind.
Hier noch das Basic-Programm:
-----------------------------
10 PHI=0:RADIUS=30
20 MX=79:MY=47
30 X=RADIUS:Y=0
100 GRAPHICS 6+16:COLOR 1
110 PLOT (MX+X,MY+Y)
130 PLOT (MX-X,MY+Y)
140 PLOT (MX-X,MY-Y)
120 PLOT (MX+X,MY-Y)
150 PLOT (MX+Y,MY+X)
170 PLOT (MX-Y,MY+X)
180 PLOT (MX-Y,MY-X)
160 PLOT (MX+Y,MY-X)
200 PHIY =PHI+Y+Y+1
210 PHIXY=PHIY-X-X+1
220 PHI =PHIY
230 Y =Y+1
240 IF ABS(PHIXY)>ABS(PHIY) THEN
PHI=PHIXY:X=X-1
250 IF Y<=X THEN 110
290 GOTO 290
phi = 0;
y = 0;
x = radius;
mxpx = mx + x;
mxmx = mx - x;
mxpy = mx;
mxmy = mx;
mypy = my;
mymy = my;
mypx = my + x;
mymy = my - x;
do
{
plot (...)
phi = phi + y+y+1;
phixy = phi -x-x+1;
++y;
++mxpy;
--mxmy;
++mypy;
--mymy;
if abs(phixy) > abs(phi) then
phi = phixy;
--x;
++mxmx;
--mxpx;
++mymx;
--mypx;
}
while(y<=x)
Die einzelnen Befehle sind im
Assemblerprogramm als Kommentar
angegeben, so dass Sie sich leichter
zurechtfinden.
Noch ein Tip zum Schluss: Interessant
ist dieses Programm auch in GR. 8,
aber dazu reicht der reservierte
Speicherplatz ab $A800 nicht aus.
Waehlen Sie daher mit dem CUSTOMIZER
(Beschreibung siehe CUSTOM.DOC)
den EXTEND-Modus an, aendern Sie
ORG auf $9000 und ZLAENGE auf 40,
den GR.8 hat ja 40 BYTES pro Zeile.
Gestartet wird das PGM dann mit
G9000 im Monitor. Schliesslich koennen
Sie XMAX (achtung, nur bis 255!)und
YMAX noch vergroesern, um mehr
Bewegungsfreiheit zu bekommen.
Sie werden staunen, wie schnell
besonders die kleineren Kreise ueber
den Bildschirm flitzen.